Source-to-source compilation